package com.yy.wga.pay.feign.response;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

import java.util.List;

/**
 * @author hongfeng
 * @date 2021/5/31
 * @desc
 */
@Data
public class WechatPayQueryOrderResponse {

    //应用ID	appid	string[1,32]	是	直连商户申请的公众号或移动应用appid。
//示例值：wxd678efh567hg6787
    /**
     * 应用ID
     */
    @JSONField(name = "address")
    private String appid;

    //直连商户号	mchid	string[1,32]	是	直连商户的商户号，由微信支付生成并下发。
//示例值：1230000109
    /**
     * 直连商户号
     */
    @JSONField(name = "mchid")
    private String mchid;

    //商户订单号	out_trade_no	string[6,32]	是	商户系统内部订单号，只能是数字、大小写字母_-*且在同一个商户号下唯一，详见【商户订单号】。
//示例值：1217752501201407033233368018
    /**
     * 商户订单号
     */
    @JSONField(name = "out_trade_no")
    private String outTradeNo;

    //微信支付订单号	transaction_id	string[1,32]	否	微信支付系统生成的订单号。
//示例值：1217752501201407033233368018
    /**
     * 微信支付订单号
     */
    @JSONField(name = "transaction_id")
    private String transactionId;

    //交易类型	trade_type	string[1,16]	否	交易类型，枚举值：
//JSAPI：公众号支付
//NATIVE：扫码支付
//APP：APP支付
//MICROPAY：付款码支付
//MWEB：H5支付
//FACEPAY：刷脸支付
//示例值：MICROPAY
    /**
     * 交易类型
     */
    @JSONField(name = "trade_type")
    private String tradeType;

    //交易状态	trade_state	string[1,32]	是	交易状态，枚举值：
//SUCCESS：支付成功
//REFUND：转入退款
//NOTPAY：未支付
//CLOSED：已关闭
//REVOKED：已撤销（付款码支付）
//USERPAYING：用户支付中（付款码支付）
//PAYERROR：支付失败(其他原因，如银行返回失败)
//ACCEPT：已接收，等待扣款
//示例值：SUCCESS
    /**
     * 交易状态
     */
    @JSONField(name = "trade_state")
    private String tradeState;

    //交易状态描述	trade_state_desc	string[1,256]	是	交易状态描述
//示例值：支付成功
    /**
     * 交易状态描述
     */
    @JSONField(name = "trade_state_desc")
    private String tradeStateDesc;

    //付款银行	bank_type	string[1,16]	否	银行类型，采用字符串类型的银行标识。银行标识请参考《银行类型对照表》
//示例值：CMC
    /**
     * 付款银行
     */
    @JSONField(name = "bank_type")
    private String bankType;

    //附加数据	attach	string[1,128]	否	附加数据，在查询API和支付通知中原样返回，可作为自定义参数使用
//示例值：自定义数据
    /**
     * 附加数据
     */
    @JSONField(name = "attach")
    private String attach;

    //支付完成时间	success_time	string[1,64]	否	支付完成时间，遵循rfc3339标准格式，格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE，YYYY-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日 13点29分35秒。
//示例值：2018-06-08T10:34:56+08:00
    /**
     * 支付完成时间
     */
    @JSONField(name = "success_time")
    private String successTime;

    /**
     * 支付者信息
     */
    @JSONField(name = "payer")
    private PayerDto payer;

    /**
     * 订单金额信息，当支付成功时返回该字段。
     */
    @JSONField(name = "amount")
    private PayerDto amount;

    /**
     * 支付场景描述
     */
    @JSONField(name = "scene_info")
    private SceneInfoDto sceneInfo;

    /**
     * 优惠功能，享受优惠时返回该字段
     */
    @JSONField(name = "promotion_detail")
    private PromotionDetailDto promotionDetail;

    @Data
    public static class PayerDto {
        //        用户标识	openid	string[1,128]	是	用户在直连商户appid下的唯一标识。
//        示例值：oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
        /**
         * 用户标识
         */
        @JSONField(name = "openid")
        private String openid;
    }

    @Data
    public static class AmountDto {
        //        总金额	total	int	否	订单总金额，单位为分。
//        示例值：100
        /**
         * 订单总金额，单位为分
         */
        @JSONField(name = "total")
        private Integer total;

        //        用户支付金额	payer_total	int	否	用户支付金额，单位为分。
//        示例值：100
        /**
         * 用户支付金额，单位为分
         */
        @JSONField(name = "payer_total")
        private Integer payerTotal;

        //        货币类型	currency	string[1,16]	否	CNY：人民币，境内商户号仅支持人民币。
//        示例值：CNY
        /**
         * 货币类型
         */
        @JSONField(name = "currency")
        private String currency;

        //        用户支付币种	payer_currency	string[1,16]	否	用户支付币种
//        示例值：CNY
        /**
         * 用户支付币种
         */
        @JSONField(name = "payer_currency")
        private String payerCurrency;
    }

    @Data
    public static class SceneInfoDto {
        //        商户端设备号	device_id	string[1,32]	否	商户端设备号（发起扣款请求的商户服务器设备号）。
//        示例值：013467007045764
        /**
         * 商户端设备号
         */
        @JSONField(name = "device_id")
        private String deviceId;
    }

    @Data
    public static class PromotionDetailDto {
        //        券ID	coupon_id	string[1,32]	是	券ID
//        示例值：109519
        /**
         * 券ID
         */
        @JSONField(name = "coupon_id")
        private String couponId;

        //        优惠名称	name	string[1,64]	否	优惠名称
//        示例值：单品惠-6
        /**
         * 优惠名称
         */
        @JSONField(name = "name")
        private String name;

        //        优惠范围	scope	string[1,32]	否	GLOBAL：全场代金券
//        SINGLE：单品优惠
//        示例值：GLOBAL
        /**
         * 优惠范围
         */
        @JSONField(name = "scope")
        private String scope;

        //        优惠类型	type	string[1,32]	否	CASH：充值
//        NOCASH：预充值
//        示例值：CASH
        /**
         * 优惠类型
         */
        @JSONField(name = "type")
        private String type;

        //        优惠券面额	amount	int	是	优惠券面额
//        示例值：100
        /**
         * 优惠券面额
         */
        @JSONField(name = "amount")
        private Integer amount;

        //        活动ID	stock_id	string[1,32]	否	活动ID
//        示例值：931386
        /**
         * 活动ID
         */
        @JSONField(name = "stock_id")
        private Integer stockId;

        //        微信出资	wechatpay_contribute	int	否	微信出资，单位为分
//        示例值：0
        /**
         * 微信出资
         */
        @JSONField(name = "wechatpay_contribute")
        private Integer wechatpayContribute;

        //        商户出资	merchant_contribute	int	否	商户出资，单位为分
//        示例值：0
        /**
         * 商户出资
         */
        @JSONField(name = "merchant_contribute")
        private Integer merchantContribute;

        //        其他出资	other_contribute	int	否	其他出资，单位为分
//        示例值：0
        /**
         * 其他出资
         */
        @JSONField(name = "other_contribute")
        private Integer otherContribute;

        //        优惠币种	currency	string[1,16]	否	CNY：人民币，境内商户号仅支持人民币。
//        示例值：CNY
        /**
         * 优惠币种
         */
        @JSONField(name = "currency")
        private Integer currency;

        /**
         * 单品列表信息
         */
        @JSONField(name = "goods_detail")
        private List<GoodsDetailDto> goodsDetailList;
    }

    @Data
    public static class GoodsDetailDto {
        //        商品编码	goods_id	string[1,32]	是	商品编码
//        示例值：M1006
        /**
         * 商品编码
         */
        @JSONField(name = "goods_id")
        private String goodsId;

        //        商品数量	quantity	int	是	用户购买的数量
//        示例值：1
        /**
         * 商品数量
         */
        @JSONField(name = "quantity")
        private Integer quantity;

        //        商品单价	unit_price	int	是	商品单价，单位为分
//        示例值：100
        /**
         * 商品单价，单位为分
         */
        @JSONField(name = "unit_price")
        private Integer unitPrice;

        //        商品优惠金额	discount_amount	int	是	商品优惠金额
//        示例值：0
        /**
         * 商品优惠金额
         */
        @JSONField(name = "discount_amount")
        private Integer discountAmount;

        //        商品备注	goods_remark	string[1,128]	否	商品备注信息
//        示例值：商品备注信息
        /**
         * 商品备注
         */
        @JSONField(name = "goods_remark")
        private Integer goodsRemark;
    }

}
